草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 运行单元测试时的内存泄漏检测

我有一个带有一套单元测试的Win32C++应用程序。单元测试完成运行后,我希望自动生成关于任何未释放内存的人类可读报告。理想情况下,该报告将有一个堆栈,其中包含每个未释放分配的文件和行号信息。最好以一致的顺序生成它们,以便轻松区分一次运行和下一次运行。(基本上,我想要valgrind--leak-check=full的结果,但在Windows上)。我已经成功地使用UMDH从正在运行的进程中获取此类信息,但该工具似乎只有在您附加到现有进程时才有效。我希望每次运行单元测试时都自动发生这种情况。有没有工具可以做到这一点?如果是这样,我该如何使用它?谢谢! 最佳答案

JVM内存模型

一、JVM模型图        JVM内存模型包括:程序计数器、本地方法栈、虚拟机堆(线程)、线程栈、方法区(元空间),程序计数器、线程栈、本地方法栈是每个线程所独有的。 1.线程栈        JVM的每一个线程对应一个线程栈,一个线程的每个方法会分配一块栈帧内存空间。栈帧中包含:局部变量表、操作数栈、动态链接和方法出口。局部变量表:存储基本数据类型(int、float、byte等),如果是引用数据类型,则存储的是其在堆中的内存地址,也就是指向对象的一个指针。操作数栈:操作数运算时一块临时的空间来存放操作数。动态链接:将代码的符号引用转换为在方法区(运行时常量池)中的直接引用。方法出口:存

c++ - 如何使用 DirectShow 将音频流写入内存缓冲区而不是文件?

我制作了一个示例应用程序,它构建了一个过滤器图以从麦克风捕获音频并将其流式传输到文件中。是否有任何过滤器允许我改为流式传输到内存缓冲区?我正在遵循关于msdn的文章中概述的方法并且当前正在使用CLSID_FileWriter对象将音频写入文件。这很好用,但我不知道如何写入内存缓冲区。是否有这样的内存接收器过滤器,还是我必须自己创建它?(我更喜欢与WindowsXP捆绑在一起的那个) 最佳答案 最简单的方法(虽然不是最优雅的)是使用SampleGrabber过滤器后跟NullRenderer过滤以终止图表。这将使您能够使用样本采集器的

c++ - 如何记录特定内存位置何时被写入以及由哪个函数写入?

我有一个很少发生但会导致我的C++程序崩溃的错误。看来我有缓冲区溢出问题或类似问题。我发现这些类型的错误最难诊断。我的程序总是因为同一个损坏的内存位置而崩溃。是否有一些调试工具可以检测何时写入特定内存位置并记录执行此操作的函数?我正在使用VisualLeakDetector(VLD)查找内存泄漏,效果很好。它替换它自己的原始mallocs并记录每个分配。我想知道内存是否有类似的东西?我知道这样的事情会削弱程序,但它可能真的很有帮助。我正在使用VisualStudio2008。 最佳答案 如果您使用的是VisualC++,请查找dat

c++ - 单个 VirtualAlloc 分配使用的内存(和其他资源)

单个VirtualAlloc(xxxx,yyy,MEM_RESERVE,zzz)使用了多少内存或其他资源?当我分配一个大块时,资源消耗(例如内核分页/非分页池)是否有任何差异,如下所示:VirtualAlloc(xxxx,1024*1024,MEM_RESERVE,PAGE_READWRITE)或多个较小的block,像这样:VirtualAlloc(xxxx,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(xxxx+1*64*1024,64*1024,MEM_RESERVE,PAGE_READWRITE);VirtualAlloc(x

c++ - GDB 无法访问 mmap() 的内核分配内存?

我遇到了GDB问题和在内核空间中分配的一些缓冲区。缓冲区由一个内核模块分配,该模块应该分配连续的内存块,然后通过mmap()调用将内存映射到用户空间。然而,GDB似乎无法随时访问这些block。例如,在GDB中遇到断点后:(gdb)x/10xb0x4567e0000x4567e000:Cannotaccessmemoryataddress0x4567e000但是,查看/proc//smaps中应用程序当前映射的内存区域显示:4567e000-456d3000rwxs8913f00000:0d883/dev/cmemSize:340kBRss:340kBPss:0kBShared_Cle

c++ - 什么时候删除由 (char *) 作为函数参数指向的内存?

代码1:voidfoo(char*text){}foo("Test");据我所知,这将会发生:内存分配给“测试”指针被创建并将其值复制到(char*textpointer),因此(char*text)指向内存中的位置,其中“Test”是(最好说,在第一个字符上"测试")函数执行完后,销毁了指向“Test”开头的指针(char*text),这不是内存泄漏吗?问题是,“Test”什么时候被删除,什么时候函数只销毁指针做某事不是更好吗?像那样?:char*_text="Test";foo(_text);delete[]_text; 最佳答案

c++ - union 的内存对齐问题

如果我们在堆栈中创建这种类型的对象,是否可以保证该对象的内存将正确对齐?unionmy_union{intvalue;charbytes[4];};如果我们在堆栈中创建charbytes[4]然后尝试将其转换为整数,则可能存在对齐问题。我们可以通过在堆中创建它来避免这个问题,但是,union对象有这样的保证吗?逻辑上应该有,但我想确认一下。谢谢。 最佳答案 嗯,这取决于你的意思。如果你的意思是:Willboththeintandchar[4]membersoftheunionbeproperlyalignedsothatImayus

c++ - boost::spirit stream_parser 消耗太大?

我在将类与iostream解析集成时遇到了一些问题支持spirit解析器。下面的示例(修改自Spirit示例)演示了问题。如果我尝试仅解析自定义类,它会成功由第一个解析和断言调用显示。如果我尝试解析自定义类以及(在本例中)逗号和float,解析器失败。谁能解释为什么会这样?如果我使用spirit解析器而不是流解析器,我可以使第二个示例工作,但是这违背了使用stream_parser的目的。我在本地示例中启用了规则调试,这表明自定义解析器使用字符串的全部内容-然而,代码表明它不应该这样做......感谢任何帮助!boost1.44.0,海合会4.1.1#includestructcomp

如何在客户端服务器应用程序中获得共享内存中的事件

我正在尝试为我的客户端服务器应用程序使用共享内存。我正在使用文件映射概念。服务器将使用CreateFileMappingAPI创建文件映射。然后它将使用MapViewOfFile和共享空间复制的colememoryAPI。客户端将打开相同的文件映射和从共享空间读取。该代码工作正常,但是根据我的要求服务器将连续放置数据,客户端将读取数据。如果我使用的话,我需要帮助while根据下面的代码,它正在运行,但它的CPU周期约为90%。这是我的客户码:while(1){pBuf=(WCHAR*)MapViewOfFile(hMapFile,//handletomapobjectFILE_MAP_ALL_